﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Cesave.Domain.PermisosModule.Entities;
using System.ComponentModel;
using Cesave.Application.Permisos.ServiceAgent;
using System.Windows.Forms;

namespace Cesave.Presentation.Permisos.WinForms.Client.ViewModels.Permisos
{
	/// <summary>
	/// Manejo de variedades.
	/// </summary>
	public partial class ExpedicionViewModel
	{
		#region Private properties

		/// <summary>
		/// Lista de variedades
		/// </summary>
		private List<Variedad> _variedades;

		/// <summary>
		/// Variedad seleccionada.
		/// </summary>
		private Variedad _variedad;

		#endregion

		#region Public properties

		/// <summary>
		/// Lista de variedades.
		/// </summary>
		public List<Variedad> Variedades
		{
			get
			{
				return _variedades;
			}
			private set
			{
				_variedades = value;
				if (_variedades != null)
					RaisePropertyChanged("Variedades");
			}
		}

		/// <summary>
		/// Variedad seleccionada.
		/// </summary>
		public Variedad Variedad
		{
			get
			{
				return _variedad;
			}
			private set
			{
				_variedad = value;
				if (_variedad != null)
					RaisePropertyChanged("Variedad");
			}
		}

		#endregion

		#region Private methods

		/// <summary>
		/// Obtiene las variedades del cultivo seleccionado.
		/// </summary>
		private void LoadVariedades()
		{
			StartWaiting();
			using (BackgroundWorker worker = new BackgroundWorker())
			{
				worker.DoWork += (sender, e) =>
				{
					using (PermisosModuleServiceWrapper service = new PermisosModuleServiceWrapper())
					{
						e.Result = service.FindVariedadesByCultivoAndStatus(Cultivo.CultivoGuid, true);
					}
				};
				worker.RunWorkerCompleted += (sender, e) =>
				{
					EndWaiting();
					if (!e.Cancelled && e.Error == null)
						Variedades = e.Result as List<Variedad>;
					else if (e.Error != null)
						ShowMessage(e.Error.Message);
				};
				worker.WorkerSupportsCancellation = true;
				worker.RunWorkerAsync();
			}
		}

		#endregion

		#region Event methods

		/// <summary>
		/// Identifica la variedad seleccionada.
		/// </summary>
		private void SetCurrentVariedad(object sender, EventArgs e)
		{
			BindingSource bindingSource = sender as BindingSource;
			if (bindingSource != null && bindingSource.Current != null)
				Variedad = bindingSource.Current as Variedad;
		}

		/// <summary>
		/// Se ejecuta cuando la propiedad Variedades cambia de valor.
		/// </summary>
		private void OnVariedadesPropertyChanged()
		{
			_expedicionView.variedadesBindingSource.DataSource = Variedades;
			_expedicionView.variedadesBindingSource.CurrentChanged += SetCurrentVariedad;
			SetCurrentVariedad(_expedicionView.variedadesBindingSource, new EventArgs());
		}

		/// <summary>
		/// Se ejecuta cuando la propiedad Variedad cambia de valor.
		/// </summary>
		private void OnVariedadPropertyChanged()
		{
			/// TODO:	Cargar los proveedores de semilla con saldo
			///			si el cultivo maneja control de semilla.
			///			
		}

		#endregion

	}
}
